<?php
namespace app\index\controller;

use think\Controller;
use think\captcha\Captcha;//验证码
use think\cache\driver\Redis;


class Login extends Controller{


    //验证码图片生成函数
    public function code(){

        $captcha = new Captcha();  //需要php安装 GD库 

        exit($captcha->entry());
    }

    //登录操作
    public function login(){

        //参数接收   用户名， 密码
        $username = input('post.username');
        $userpass = input('post.userpass');

        //需要验证码
        $code = input('post.code');
        $captcha = new Captcha();

        if(!$captcha->check($code)){
            //验证码错误
            $this->error('验证码错误');
        }

        $where['username'] = $username;
        $where['userpass'] = md5($userpass);

        // 有 prefix 的 => go_
        $res = db('admin')->where($where)->find();

        $msg = [];
        if(!empty($res)){
            //赋值给 session
            session('user',$username);

//            echo session('user');die;
            $msg['result']=1;
            $msg['tips']='登陆成功！';
            $result = json_encode($msg,320);
            echo $result;


        }
        else{
            $msg['result']=2;
            $msg['tips']='登陆失败，用户名或密码错误！';
            $result = json_encode($msg,320);
            echo $result;
        }

    }//login


    /* 手机 app 登录|注册  手机+短信 */
    public function app_login(){
        $cached = new Redis();
        $mobile = input('post.mobile');
        $mobile = trim($mobile);
        $mid = input('post.mid');
        $uid = input('post.uid') ;
        $uid = !empty($uid) ? $uid : '0';  //如果没有 直接登录app 的， 就不会有。 没有就默认0
        $code = input('post.code');  //验证码
        $code = trim($code);
        $from = input('post.froms');    //来源  app端 是 froms 字段 一般加个 s ， 以区别 数据库关键字
//        $arr = session('user_info');  //客户端无法使用 cookie ， 所以 sessionid 会变化， 导致无法使用session 来验证  验证码的正确性
        //这里改用 redis ， 通过搜索 传入的手机号， 查找redis 缓存里面是否有对应的  '手机' => '验证码'  键值对



        if( $this->check_verify_msg_code($mobile,$code) ){  // 返回 true 代表验证通过

            //检查数据库有没有记录先
            $tmp = $this->if_mobile_exist($mobile);
            if(!empty($tmp)){//如果有记录  直接返回

                $msg = [
                    'rows' =>$tmp,
                    'result' => 1,
                    'tips' => '已经注册过的用户！直接登录OK！'
    
                ];


                exit(json_encode($msg,320));
            }

            $res =  db('member')->insert([

                    'mobile'=>$mobile,  //手机
                    'from' => $from,
                    'diamond' => $uid,   //渠道商ID
                    'login_time'=>strtotime(date('Y-m-d',time() )),
                    'first_login_time'=>strtotime(date('Y-m-d',time() )),
                    'time'=>time()
            ]);

            if($res){
                $tmp = db('member')->field('uid')->where(['mobile'=>$mobile])->find();
                if(isset($tmp['uid'])){
                    $msg = [
                        'rows' =>$tmp,
                        'result' => 1,
                        'tips' => '注册成功！'
        
                    ];
//                    return $msg;
                    exit(json_encode($msg,320));
                }//if
            }//if
            else{
                $msg = [
                    'uid' =>null,
                    'result' => 2,
                    'tips' => '登录失败，网络不通畅'
                ];
//                return $msg;
                exit(json_encode($msg,320));
            }//else
            
            
        }else{
            $msg = [
                'result' => 2,
                'tips' => 'Not OK！！ 手机 或 验证码不一致~'
            ];

//            return $msg;
            exit(json_encode($msg,320));
        }//else
        
        

    }//app_login fun


    /* 查询是否存在对应的键值对  传入  键值对   */
    public function check_verify_msg_code($m,$c){
        $cached = new Redis();
        $arr = $cached->get('user_info');
        if(isset($arr[$m]) && !empty($arr[$m])){
            //如果有对应的手机， 就比较下  code 是否正确
            if($c == $arr['rand_code']){
                return true;
            }
            else{
                return false;
            }

        }
        else{
            return false;
        }
    }


    //查是否有 对应的手机存在
    public function if_mobile_exist($m){

        $res = db('member')->field('uid')->where(['mobile'=>$m])->find();
        if(isset($res['uid']) && !empty($res['uid'])){
            return $res;
        }
        else{
            return false;
        }
    }

    public function logout(){

        session('user',null);

        $box = [];
        $box['result'] = 1;
        $box['tips'] = '注销成功~~@';
        exit(json_encode($box,320));
    }





}